const {
  QNMPPlugin,
} = requirePlugin('QNBleApi');
const APPID = 'LAIKANG20231106';
import api from '../../../api/index'
const logger = () => {
  const wxlogger =
    wx.getLogManager &&
    wx.getLogManager({
      level: 0,
    });
  const log = (...params) => {
    console.log(...params);
    wxlogger && wxlogger.log(...params);
  };
  return {
    log,
  };
};
Page({
	/**
   * 页面的初始数据
   */
	data: {
		bindDeviceId: null,
		devicelist: [],
		showDevice: false,
		actions: [],
		bindDevice: [],
		saveDevice: {},
		showDialog: false,
		bindDeviceTextInfo: '',
		loading: false,
	},

	/**
   * 生命周期函数--监听页面加载
   */
	onLoad(options) {
		this.get()
  },
  initBLE() {
    // 初始化蓝牙
    this.bleApi = new QNMPPlugin({
      appId: APPID, // 必须, 客户小程序的appid, 需要配置才能使用，
      mpwx: wx, // 非必须 连接广播称时需要
      logger: logger(), // 非必须，日志功能，最好有，方便排查问题，可以替换为客户自己的
      useTeenagerAlgorithm: false // 开启青少年算法，开启后，小于18岁青少年会展示青少年算法
    });

    // 错误监听
    this.bleApi.onError = (err) => {
      console.error('捕捉到错误', err.detail);
    };

    // 初始化回调
    this.bleApi.onReady = ({
      bleEnableState, //表示当前蓝牙是否为开启状态
    }) => {
      if (bleEnableState) {
        this.bleApi.startBleDeviceDiscovery();
      } else {
        this.setData({
          bindDeviceTextInfo: '请打开蓝牙'
        })
        setTimeout(() => {
          this.setData({
            showDialog: false
          })
        }, 500);
        console.log('蓝牙状态为关闭');
      }
    };

    // 设置蓝牙监听事件
    this.bleApi.setBleEventListener(this.bleEventListener());

    // 初始化
    this.bleApi.init();
  },
  // 蓝牙相关事件回调
  bleEventListener() {
    /**
     * 监听扫描到设备的回调
     */
    const onBleDeviceFound = (device) => {
      console.log(device,' 发现设备')
      const actions =  [
        { name: device.name, subname: device.deviceId, deviceId: device.deviceId },
      ]
      this.setData({
        showDialog: false,
        actions: actions
      })
      this.setData({ showDevice: true });
    };
    
    /**
     * 监听蓝牙状态发生变化回调，连接成功或断开连接都会出触发
     */
    const onBluetoothEnableChange = ({
      available
    }) => {
      if (available) {
        // this.updateState('蓝牙可用，空闲');
        this.setData({
          bindDeviceTextInfo: '蓝牙可用，正在搜索蓝牙设备'
        })
        this.bleApi.startBleDeviceDiscovery();
      } else {
        this.setData({
          bindDeviceTextInfo: '蓝牙不可用'
        })
        setTimeout(() => {
          this.setData({
            showDialog: false
          })
        }, 500);
      }
      this.setData({
        available,
      });
    };
    return {
      onBleDeviceFound,
      onBluetoothEnableChange,
    };
  },
  /**
     * 停止蓝牙活动
     */
  stopBle: async function () {
		if(this.bleApi) {
			await this.bleApi.stop();
			await this.bleApi.releaseBleSource();
		}
  },
	// 链接设备
	goBindEq() {
		this.setData({
			bindDeviceTextInfo: '正在搜索蓝牙设备'
		})
		this.setData({
			showDialog: true
		})
		this.initBLE() // 蓝牙初始化
	},
	onCancel() {
		this.setData({
			showDialog: false,
		})
	},
	onClose() {
    this.setData({ showDevice: false });
  },
	onSelect(event) {
		this.setData({
			saveDevice: event.detail
		})
		const device = this.data.bindDevice.find(item => {
			return item.name === this.data.saveDevice.name
		})
		let saveDataList = []
		// 如果绑定的有该设备
		if(device) {
			wx.showToast({
				title: '该设备已绑定',
				icon: 'none',
				duration: 3000
		  })
		} else {
			const bindDevice = { name:this.data.saveDevice.name,deviceId: this.data.saveDevice.deviceId}
			saveDataList = this.data.bindDevice.concat(bindDevice)
			this.putData(saveDataList, '保存')
		}
  },
	async get() {
		this.setData({
			bindDevice: []
		})
		try {
			this.setData({
				loading: true
			})
		  const res = await api.post('/api/user/storage/get', {
			data: {
			  'key': 'devicelist'
			}
		  })
		  if(res[0].value) {
				var array = JSON.parse(res[0].value)
				const listValue = array.filter(item => item.name === 'heightbody')
				if(listValue.length > 0) {
					this.setData({
						bindDevice: listValue[0].devicelist
					})
				}
		  }
			this.setData({
				loading: false
			})
		} catch (e) {
		  console.log('get->', e)
		  return null
		}
	},
	delEq(e) {
		const name = e.currentTarget.dataset.name
		const data = this.data.bindDevice.filter(item => {
			return item.name !== name
		})
		this.putData(data, '删除')
	},
	putData(deviceIdList, type) {
		let num = [{name:'heightbody',devicelist: deviceIdList}]
		num = JSON.stringify(num)
		this.doSavedevice(num, type)
	},
	// 储存设备
	async doSavedevice(result, type) {
		try {
		  await api.post('/api/user/storage/set', {
				data: {
					'key': 'devicelist',
					'value': result
				}
				})
				wx.showToast({
					title: `${type}成功`,
					icon: 'none',
					duration: 3000
				})
				this.setData({ showDevice: false });
				this.get()
			} catch (e) {
				console.log('put->', e)
			}
	  },

	/**
   * 生命周期函数--监听页面初次渲染完成
   */
	onReady: function() {
    
	},

	/**
   * 生命周期函数--监听页面显示
   */
	onShow() {},

	/**
   * 生命周期函数--监听页面隐藏
   */
	onHide() {},

	/**
   * 生命周期函数--监听页面卸载
   */
	onUnload() {
		this.stopBle()
	},
	/**
   * 页面相关事件处理函数--监听用户下拉动作
   */
	onPullDownRefresh() {},

	/**
   * 页面上拉触底事件的处理函数
   */
	onReachBottom() {},

	/**
   * 用户点击右上角分享
   */
	onShareAppMessage() {}
});
